package cn.com.guanying.android.ui;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import cn.com.guanying.javacore.v11.common.observer.Observer;
import cn.com.guanying.javacore.v11.interfaces.IActivity;

/**
 * <a>页面基类</a>
 * 
 * @author zhangbing
 * 
 */
public abstract class BaseActivity extends Activity implements IActivity,Observer{
	
	public Handler mHandler=new Handler();
	protected Button mTitleLeftButton;
	protected TextView mTitleContent;
	protected Button mTitleRigthButton;
	private Toast mToast;
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(getContentView());
		doFindView();
		// 需要在doInit方法前面
		addInterestedThing();
		doInit();
		
	}
	protected abstract int getContentView();
	
	/**
	 * 处理监听的事件，<b><font color='red'>此方法在UI线程中运行，无需再使用handler，并且不能做耗时的工�?/font></b>
	 * 
	 * @param sender
	 *            被监听�?
	 * @param eventId
	 *            监听的事�?
	 * @param datas
	 *            相关数据
	 */
	protected abstract void onLogicEventUI(Object sender, int eventId, Object[] datas);
	
	/**
	 * 观察者的回调接口方法. sender是否为null取决于被观察者激发一个消息时的设�? 通常可以根据sender==this来判断是否是自己�?��的事�?
	 * 
	 * @param sender
	 *            事件源（被观察着�?
	 * @param eventId
	 *            事件类型
	 * @param datas
	 *            事件相关的数�?
	 */
	public void onNotify(final Object sender, final int eventId, final Object... args)
	{
		mHandler.post(new Runnable(){
			
			@Override
			public void run()
			{
				onLogicEventUI(sender, eventId, args);
			}
		});
	}
	
	protected void onDestroy() {
		super.onDestroy();
		deleteInterestedThing();
	}
	/**
	 * 添加需要监听的事件，此方法会在onCreate时（doInit之前）调用
	 */
	protected void addInterestedThing() {
	};
	public void toast(String msg){
		if(mToast!=null){
			mToast.cancel();
		}
		mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
		mToast.show();
	}
	/**
	 * 取消监听的事件，此方法会在onDestory时调用
	 */
	protected void deleteInterestedThing() {
	};
	
}
